package com.xinz.protocal.config;

import com.xinz.protocal.ErrorHandler;
import com.xinz.protocal.NativeInvokeFilter;
import com.xinz.protocal.client.RemoteInvokeListener;
import com.xinz.protocal.client.RequestHeaderProvider;
import com.xinz.protocal.server.ResponseHeaderProvider;

public interface NativeConfig {

	public abstract RequestHeaderProvider getRequestHeaderProvider();
	
	public abstract ResponseHeaderProvider getResponseHeaderProvider();
	
	public abstract RemoteInvokeListener getRemoteInvokeListener();
	
	public abstract ErrorHandler getErrorHandler();
	
	public abstract NativeInvokeFilter getNativeInvokeFilter();

	public static class Abstract implements NativeConfig {
		
		RequestHeaderProvider requestHeaderProvider = new RequestHeaderProvider.Abstract();
		
		ResponseHeaderProvider responseHeaderProvider = new ResponseHeaderProvider.Abstract();
		
		RemoteInvokeListener remoteInvokeListener = new RemoteInvokeListener.Abstract();
		
		ErrorHandler errorHandler = new ErrorHandler.Abstract();
		
		NativeInvokeFilter nativeInvokFilter = new NativeInvokeFilter.Abstract();
		

		@Override
		public RequestHeaderProvider getRequestHeaderProvider() {
			return requestHeaderProvider;
		}

		@Override
		public ResponseHeaderProvider getResponseHeaderProvider() {
			return responseHeaderProvider;
		}

		@Override
		public RemoteInvokeListener getRemoteInvokeListener() {
			return remoteInvokeListener;
		}

		@Override
		public ErrorHandler getErrorHandler() {
			return errorHandler;
		}

		@Override
		public NativeInvokeFilter getNativeInvokeFilter() {
			return nativeInvokFilter;
		}
		
	}
}
